.TH I2CDUMP 8 "May 2022"
.SH NAME
i2cdump \- examine I2C registers

.SH SYNOPSIS
.B i2cdump
.RB [ -f ]
.RB [ "-r first-last" ]
.RB [ -y ]
.RB [ -a ]
.I i2cbus
.I address
.RI [ "mode " [ "bank " [ bankreg ]]]
.br
.B i2cdump
.B -V
.br
.B i2cdump
.B -h

.SH DESCRIPTION
i2cdump is a small helper program to examine registers
visible through the I2C bus.

.SH OPTIONS
.TP
.B -V
Display the version and exit.
.TP
.B -h
Display the help and exit.
.TP
.B -f
Force access to the device even if it is already busy. By default, i2cdump
will refuse to access a device which is already under the control of a
kernel driver. Using this flag is dangerous, it can seriously confuse the
kernel driver in question. It can also cause i2cdump to return invalid
results. So use at your own risk and only if you know what you're doing.
.TP
.B -r first-last
Limit the range of registers being accessed. This option is not available
with mode \fBs\fP. For mode \fBW\fP,
\fBfirst\fR must be even and \fBlast\fR must be odd.
.TP
.B -y
Disable interactive mode. By default, i2cdump will wait for a confirmation
from the user before messing with the I2C bus. When this flag is used, it
will perform the operation directly. This is mainly meant to be used in
scripts.
.TP
.B -a
Allow using addresses between 0x00 - 0x07 and 0x78 - 0x7f. Not recommended.
.PP
At least two options must be provided to i2cdump. \fIi2cbus\fR indicates the
number or name of the I2C bus to be scanned. This number should correspond to one
of the busses listed by \fIi2cdetect -l\fR. \fIaddress\fR indicates the
address to be scanned on that bus, and is an integer between 0x08 and 0x77.
.PP
The \fImode\fR parameter, if specified, is one of the letters \fBb\fP, \fBw\fP,
or \fBi\fP, corresponding to a read size of a single byte, a 16-bit
word, an I2C block, respectively. The \fBc\fP mode is a
little different, it reads all bytes consecutively, and is useful for chips that
have an address auto-increment feature, such as EEPROMs. The \fBW\fP mode is
also special, it is similar to \fBw\fP except that a read command will only
be issued on even register addresses; this is again mainly useful for EEPROMs.
.PP
A \fBp\fP can also be appended to the \fImode\fR parameter (except for
\fBi\fP and \fBW\fP) to enable PEC. If the \fImode\fR parameter is omitted,
i2cdump defaults to byte access without PEC.
.PP
The \fIbank\fR and \fIbankreg\fR parameters are useful on the W83781D and
similar chips (at the time of writing, all Winbond and Asus chips).
\fIbank\fR is an integer between 0 and 7, and \fIbankreg\fR is an integer
between 0x00 and 0xFF (default value: 0x4E). The W83781D data sheet has more
information on bank selection.

.SH WARNING
i2cdump can be dangerous if used improperly. Most notably, the \fBc\fP mode
starts with WRITING a byte to the chip. On most chips it will be stored in the
address pointer register, which is OK, but some chips with a single register
or no (visible) register at all will most likely see this as a real WRITE,
resulting in possible misbehavior or corruption. Do not use i2cdump
on random addresses. Anyway, it is of little use unless you have good
knowledge of the chip you're working with and an idea of what you are looking
for.

.SH EXAMPLES
.PP
Dump the whole contents of I2C device at 7-bit address 0x50 on bus 9
(i2c-9), using the default read method (byte mode), after user confirmation:
.nf
.RS
# i2cdump 9 0x50
.RE
.fi
.PP
Immediately dump the whole contents of I2C device at 7-bit address 0x50 on
bus 9 (i2c-9), using I2C block read transactions (no user confirmation):
.nf
.RS
# i2cdump -y 9 0x50 i
.RE
.fi
If the device is an EEPROM, the output would typically be the same as output
of the previous example.
.PP
Dump registers 0x00 to 0x3f of the I2C device at 7-bit address 0x2d on
bus 1 (i2c-1), using the default read method (byte mode), after user
confirmation:
.nf
.RS
# i2cdump -r 0x00-0x3f 1 0x2d
.RE
.fi

.SH BUGS
To report bugs or send fixes, please write to the Linux I2C mailing list
<linux-i2c@vger.kernel.org> with Cc to the current maintainer:
Jean Delvare <jdelvare@suse.de>.

SMBus block mode used to be supported by this tool.
Please use \fIi2cget\fR instead.

.SH SEE ALSO
i2cdetect(8), i2cget(8), i2cset(8), i2ctransfer(8), isadump(8)

.SH AUTHOR
Frodo Looijaard, Mark D. Studebaker and Jean Delvare

This manual page was originally written by David Z Maze <dmaze@debian.org> for
the Debian GNU/Linux system.
